웹 개발

블로그_02_첫 배포_오라클 인스턴스

작성자 : Heehyeon Yoo|2025-12-15
# Blog# 웹사이트# Next.js# Oracle Cloud

블로그를 웹에 올리고 싶어졌다

정보보호를 공부하면서 노션을 이용해 공부한 내용과 실습 내용, 발표 내용 등 자료를 기록하기 시작했다.
혼자 공부하며 느낀 것들, 배운 것들이 많았고 이를 웹에 올려서 포트폴리오든 뭐든 쓰면 좋겠다는 생각이 들었다.
나아가 내가 어떤 사람인지 알려줄 수 있는(브랜딩을 위한) 일종의 베이스 캠프가 되면 좋겠다고 생각했다.
네이버나 티스토리, 워드프레스 등으로 구축하면 그나마 편했을 텐데 배운 게 아깝다는 생각이 들기도 하고,
내가 원하는 대로 커스텀하고 싶다는 생각이 들었다.
티스토리, 워드프레스도 커스텀이 어느 정도 가능하지만 해당 서비스에 종속되는게 싫었다.
게다가 옵시디언을 사용하며 마크다운 형태로 정리한 자료가 많아서, 이를 그대로 쓰자니 구조를 맞추고 설정하기도 싫었다.
결국 결론은 하나였다.

정적 웹사이트 형태로 개인 블로그를 직접 만들어서 배포해보자.

어떻게 배포할까?

블로그 구축이 끝나고, 몇 차례 테스트도 해본 후 배포 준비를 마무리하며 가장 먼저 고민한 건 어디에 어떻게 배포할 것인가였다.
vercel같은 간단한 서비스는 여러 차례 써보았기 때문에 이런 것을 쓰면 될까 싶었는데, 서버 환경을 직접 만져보고 싶었고,
나중에 정적 웹사이트에서 벗어나 다른 프로젝트도 쉽게 붙일 수 있으면 좋겠다고 생각했다.
그래서 Oracle Cloud Free Tier 인스턴스를 선택했다.
일단 비용 부담이 없었고, 실제 Linux 서버 환경을 사용할 수 있으며, SSH 접속부터 포트 설정까지 직접 할 수 있다.
이정도는 나도 할 수 있겠다 싶기도 했고, 서버 환경을 직접 만져보지도 못하면 공부한 게 의미가 없지 않나 싶었다.
그래서 Oracle Cloud에 가입하고, Ubuntu 기반 인스턴스를 하나 생성했다.

서버에 코드 올리기

서버가 준비되자 가장 먼저 GitHub 레포지토리에 코드를 푸시했다.
이후 SSH로 서버에 접속한 후 서버에서 GitHub 레포지토리를 clone했다.

git clone https://github.com/username/blog.git

웹 서버 실행과 첫 실패

이 블로그는 Next.js 기반의 정적 사이트다.
로컬에서는 이미 잘 동작하고 있었기 때문에, 서버에서도 동일하게 실행하면 될 거라고 생각했다.

npm install
npm run build
npm start

그러나 서버 환경에서 예상하지 못했던 문제들이 하나씩 등장했다.
오라클 인스턴스의 서버 메모리가 넉넉하지 않아 빌드 시간이 오래 걸리는 문제,
그리고 실행은 되었지만 외부 접속이 되지 않는 문제였다.

외부 접속 문제 — 포트와 방화벽

서버 안에서는 분명히 애플리케이션이 실행 중이었지만, 브라우저에서 서버 IP로 접속하면 아무 반응이 없었다.
서버에서는 3000번 포트로 서비스가 떠 있었고 Oracle Cloud 보안 규칙에서도 해당 포트가 열려 있었다.
이렇게만 보면 아무런 문제가 없을 상황이었다.
심지어 서버 내부에서 curl http://localhost:3000로 요청해도 정상적으로 응답을 받을 수 있었는데,
도대체 외부에서 접속이 되지 않는 것이었다.
iptables를 확인해보니 다음과 같이 출력됐다.

sudo iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source          destination
1    ACCEPT     all  --  0.0.0.0/0       0.0.0.0/0    state RELATED,ESTABLISHED
2    ACCEPT     all  --  0.0.0.0/0       0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0       0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0       0.0.0.0/0    tcp dpt:22
→ 5    REJECT     all  --  0.0.0.0/0       0.0.0.0/0    reject-with icmp-host-prohibited
6    ACCEPT     tcp  --  0.0.0.0/0       0.0.0.0/0    tcp dpt:80
7    ACCEPT     tcp  --  0.0.0.0/0       0.0.0.0/0    tcp dpt:443
8    ufw-before-logging-input  all  --  0.0.0.0/0  0.0.0.0/0
9    ufw-before-input          all  --  0.0.0.0/0  0.0.0.0/0
10    ufw-after-input           all  --  0.0.0.0/0  0.0.0.0/0
11   ufw-after-logging-input   all  --  0.0.0.0/0  0.0.0.0/0
12   ufw-reject-input          all  --  0.0.0.0/0  0.0.0.0/0
---

어떻게 저렇게 설정이 되었는지 잘 모르겠지만 뭔가 중간에 잘못된 것 같다.
5번 규칙에서 REJECT 체인으로 빠지는 상황이라 뒤에 추가된 ACCEPT 규칙이 전혀 평가되지 않은 것이다.
REJECT 체인을 제거하고 맨 밑으로 옮기니 접속에 성공했다.

배포 후

이런 저런 고칠 것들이 눈에 보였지만, Oracle Cloud 인스턴스를 이용해 개인 블로그를 웹에 배포하는 데 성공했다.
기쁜 마음도 잠시... 두 가지 마음에 안 드는 문제가 있었다.

  1. 노트 파일을 추가하거나 수정한 후에 이를 반영하기 위해 매번 서버에 접속해야 한다는 점
  2. 버그를 하나 수정하려고 코드를 수정하면 다시 빌드를 반복해야 하는 점
    특히 두 번째는 오라클 인스턴스의 낮은 성능 때문인지, 빌드 한 번에 10분이 넘는 시간이 걸리는 데다,
    행여나 인스턴스 내에서 다른 작업을 하고 있을 때 빌드하면 서버가 뻗어버리기도 하는 문제가 있었다.
    이것을 해결해야 했다.